package com.hyt.it.ogt.kq.service.gov.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hyt.it.ogt.kq.service.gov.model.dto.TimeSubjectPaperDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.PaperFileDTO;
import com.hyt.it.ogt.kq.service.gov.model.entity.Paper;
import com.hyt.it.ogt.kq.service.gov.model.vo.MockPaper;
import com.hyt.it.ogt.kq.service.gov.model.vo.PaperVO;
import com.hyt.model.PageParam;

import java.util.List;

/**
 * <p>
 * 试卷信息表 Mapper 接口
 * </p>
 *
 * @author liuq
 * @since 2021-04-27
 */
public interface PaperMapper extends BaseMapper<Paper> {

	/**
	 * 查询试卷管理分页数据
	 * @param pageParam
	 * @param taskId
	 * @return
	 */
	Page<PaperVO> selectTimeSubjectPaper(PageParam<PaperVO> pageParam, String taskId);

	/**
	 * 查询试卷管理分页数据
	 * @param pageParam 分页参数
	 * @param taskId 考试任务id
	 * @param type 试卷类型标识
	 * @return 试卷管理分页数据
	 */
	Page<PaperVO> page(PageParam<PaperVO> pageParam, String taskId, Integer type);

	/**
	 * 根据批次科目id查询
	 * @param timeSubjectId
	 * @return
	 */
	PaperVO selectTimeSubjectPaperById(String timeSubjectId);
	
	/**
	 * 查询试卷管理总条数
	 * @param taskId 考试任务id
	 * @return 试卷管理总条数
	 */
	Integer countPaperPage(String taskId);

	/**
	 * 获取批次试卷信息给考试系统
	 * @param taskCode 考试任务编号
	 * @param roomCode 考场编号
	 * @param timeCode 批次编号
	 * @param paperType 试卷类型
	 * @return 批次试卷信息
	 */
	List<PaperFileDTO> getForExamSystem(String taskCode, String roomCode, String timeCode, Integer paperType);

	/**
	 * 获取批次试卷授权码信息给考试系统
	 * @param taskCode 考试任务编号
	 * @param roomCode 考场编号
	 * @param timeCode 批次编号
	 * @param paperType 试卷类型
	 * @param paperCodes 试卷编号
	 * @return 批次试卷授权码信息
	 */
	List<PaperFileDTO> getPaperAuthorizationCode(String taskCode, String roomCode, String timeCode,
												 Integer paperType, String paperCodes);

	/**
	 * 根据考试任务编号获取OBT考试系统模拟试卷
	 * @param taskCode 考试任务编号
	 * @param paperType 试卷类型
	 * @return OBT考试系统模拟试卷
	 */
	PaperFileDTO getObtMockPaper(String taskCode, Integer paperType);

	/**
	 * 根据考试任务编号获取OBT考试系统模拟试卷授权码
	 * @param taskCode 考试任务编号
	 * @param paperType 试卷类型
	 * @param paperCode 试卷编号
	 * @return OBT考试系统模拟试卷授权码
	 */
	PaperFileDTO getObtMockPaperAuthorizationCode(String taskCode, String paperCode, Integer paperType);

	/**
	 * 根据任务id获取模拟试卷
	 * @param taskId
	 * @return
	 */
	List<MockPaper> getMockPaper(String taskId);

	/**
	 * 批次科目下是否存在试卷
	 * @param taskId 考试任务id
	 * @param timeSubjectId 批次科目id
	 * @param type 试卷类型标识
	 * @return true：存在试卷，false：不存在试卷
	 */
	Boolean hasPaper(String taskId, String timeSubjectId, Integer type);

	/**
	 * 获取批次科目试卷DTO
	 * @param taskId 考试任务id
	 * @param timeSubjectId 批次科目id
	 * @param type 试卷类型标识
	 * @return 批次科目试卷DTO
	 */
	TimeSubjectPaperDTO getTimeSubjectPaperDTO(String taskId, String timeSubjectId, Integer type);

}
